Magnetic storage systems such as disk drives include a magnetic medium or platter with a magnetic coating that is divided into data tracks. The data tracks are divided into data sectors that store fixed-sized data blocks. A read/write head typically includes a write circuit and write element such as an inductor that selectively generates positive and negative magnetic fields that are stored by the magnetic medium. The stored positive and negative fields represent binary ones and zeros. The read/write head includes an element such as a magneto-resistive element that senses the stored magnetic field to read data from the magnetic medium. A spindle motor rotates the platter and an actuator arm positions the read/write head relative to the magnetic medium.
Magnetic storage systems typically code the user data sequence or user data using Run Length Limited (RLL) code. RLL coding eliminates sequences in the user data that may cause problems with timing circuits of the magnetic storage system. For example, a RLL code enforces constraints on the number of consecutive ones and/or zeros that are allowed to occur in the data. The efficiency of the RLL code is typically measured in terms of a code rate. For every m-bits or m-bytes of user data, an n-bit or n-byte encoded word is written to the storage media. RLL codes are used to eliminate unwanted bit patterns in the data and typically do not have error correction capability. RLL coding, however, reduces data storage capacity by increasing channel bit density (CBD), which reduces a signal to noise ratio (SNR) and may lead to lower reliability.
Referring now to FIG. 1, a write-path of a data storage system with RLL coding is shown. A host bus interface (HBI) 14 receives user data from a host computer 16. A buffer manager (BM) 18 initially stores the user data in a buffer 20 and then sends the user data from the buffer 20 to a disk formatter (DF) 22 with proper timing. An ECC/CRC encoder 24 appends CRC bits to the user data. The CRC bits are calculated based on the user data.
ECC bits are computed based on the user data and the CRC bits and appended thereto. A scrambler 26 generates a pseudo-random scrambling sequence that is based on a polynomial and seed. The user data and the scrambling sequence are input to an XOR gate 27, which outputs scrambled user data. A RLL encoder 28 is used to constrain the unwanted bit patterns in the scrambled user data sequence.
To increase SNR and data storage capacity, data storage systems were developed without RLL coding using data-dependent scramblers (DDS). Data is processed by the DDS to eliminate unwanted bit patterns. The DDS is disclosed in “Improved Data Coding For Enforcing Constraints On Ones and Zeros In a Communications Channel”, U.S. patent application Ser. No. 10/423,552, filed Apr. 25, 2003, which is commonly assigned and is hereby incorporated by reference in its entirety. The scrambled user data from the DDS is forwarded to an ECC/CRC encoder, which generates and appends CRC and ECC bits to the user data.
Because the CRC and ECC bits may also contain unwanted bit patterns, traditional RLL coding may be used to encode the ECC/CRC portion. The data storage system is still referred to as being without RLL coding because the CRC and/or ECC bits are relatively small in number as compared to the number of bits in the user data. In data storage systems without RLL coding, the CRC bits are generated and appended by the ECC/CRC encoder. Because the ECC/CRC encoder is located downstream from other devices, such as the disk formatter (DF), the buffer manager (BM), the buffer, etc., the CRC bits that are generated do not detect errors that are generated in these devices.
Referring now to FIG. 2, a write-path of a data storage system that includes the DDS is shown. The host computer 16 generates user data that is transferred to the host bus interface (HBI) 14. The buffer manager (BM) 18 receives the user data from the HBI 14 and controls the data flow through the write path. The user data is periodically stored in the buffer 20. The BM 18 passes the user data on based on sequence timing of data flow through the write path. The disk formatter (DF) 22 receives the user data from the BM 18 and formats the user data.
A data dependent scrambler (DDS) 40 receives the user data from the DF 22 and scrambles the user data to eliminate the unwanted bit patterns. An ECC/CRC encoder 42 appends CRC bits that are calculated based on the scrambled user data. ECC bits are also computed based on the scrambled user data and the CRC bits and appended to the scrambled user data.
A host CRC feature is sometimes used to maximize the error detection capability of the data storage system without adding more error detecting code, such as another layer of CRC. In traditional host CRC systems, the CRC is generated in the host bus interface (HBI), which initially receives the user data from the host computer. The CRC is generated on the write path using the same polynomial and seed as those used in the ECC/CRC encoder. Therefore, the ECC/CRC encoder can use the same CRC bits to detect ECC miscorrections without losing format efficiency. Additionally, on the read path, while the user data is transferred from the HBI to the host computer, a CRC check detects any errors that occur.
Although the host CRC feature is supported by a traditional data storage system with RLL coding, it is more difficult to implement the host CRC feature in a data storage system having a DDS. This is due to the fact that the user data at the HBI and the data at the ECC/CRC encoder 42 are different. Therefore, the CRC generated at the HBI cannot be used by the ECC/CRC encoder to detect miscorrection even if the same CRC generator polynomials are used.